package com.liu.structure.stack;

import java.util.Stack;

/**
 * 剑指 Offer 30. 包含min函数的栈
 */
public class Offer30 {
    public static void main(String[] args) {
        Offer30 offer30 = new Offer30();
        offer30.push(-2);
        offer30.push(0);
        offer30.push(-3);
        offer30.min();   // 返回 -3.
        offer30.pop();
        offer30.top();      // 返回 0.
        offer30.min();   // 返回 -2.
    }

    /**
     * 定义栈的数据结构，请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中，调用 min、push 及 pop 的时间复杂度都是 O(1)。
     * 栈的数据结构,先进后出
     */
    private Stack stack;

    private Stack stackTemp;

    public Offer30() {
        stack = new Stack<>();
        stackTemp = new Stack<>();
    }

    public void push(int x) {
        stack.push(x);
        stackTemp.push(x);//?
    }

    public void pop() {
        stack.pop();
        stackTemp.pop();//?
    }

    public int top() {
        int result = 0;
        result = (int) stack.peek();
        System.out.println(result);
        return result;
    }

    public int min() {
        int result = 0;
        result = (int) stackTemp.peek();
        System.out.println(result);
        return result;
    }
}
